package com.yz.app.gsmdata.util;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class BaseTools {

    private static int seq = 0;
    private static final int MAX_PER_SECOND = 10000000;

    public BaseTools() {
    }

    public static synchronized String getNextSeq() {
        ++seq;
        return (new SimpleDateFormat("yyMMddHHmmss")).format(new Date()) + String.format("%05d", seq %= 10000000);
    }


    /**
     * 获取随机日期
     * @param beginDate 起始日期，格式为：yyyy-MM-dd
     * @param endDate 结束日期，格式为：yyyy-MM-dd
     * @return
     */
    public static String randomDate(String beginDate, String endDate){
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date start = format.parse(beginDate);  // 构造开始日期
            Date end = format.parse(endDate);  // 构造结束日期
            // getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
            if(start.getTime() >= end.getTime()){
                return null;
            }

            long date = random(start.getTime(),end.getTime());

            return  format.format(new Date(date)) ;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 获取随机时间戳
     * @param beginDate 起始日期，格式为：yyyy-MM-dd
     * @param endDate 结束日期，格式为：yyyy-MM-dd
     * @return
     */
    public static long randomDateTime(String beginDate, String endDate){
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date start = format.parse(beginDate);  // 构造开始日期
            Date end = format.parse(endDate);  // 构造结束日期
            // getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
            if(start.getTime() >= end.getTime()){
                return 0;
            }

            long date = random(start.getTime(),end.getTime());

            return  date ;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 时间字符串转时间对象
     * @param sourceDateStr
     * @param sourceDateFormat
     * @return Date
     */
    public static Date getDateByStr(String sourceDateStr,String sourceDateFormat){
        try {
            SimpleDateFormat sourceSimpleDateFormat = new SimpleDateFormat(sourceDateFormat);
            Date date = sourceSimpleDateFormat.parse(sourceDateStr);
            return date;
        } catch (Exception e) {
            return null;
        }
    }

    public static long random(long begin,long end){
        long rtn = begin + (long)(Math.random() * (end - begin));
        // 如果返回的是开始时间和结束时间，则递归调用本函数查找随机值
        if(rtn == begin || rtn == end){
            return random(begin,end);
        }
        return rtn;
    }
    public static String getCurStrDate(int type) {
        String pattern = "yyyy-MM-dd HH:mm:ss";
        switch(type) {
            case 0:
                pattern = "yyyy-MM-dd";
                break;
            case 1:
                pattern = "yyyy-MM-dd HH:mm:ss";
                break;
            case 2:
                pattern = "yyyyMMdd";
                break;
            case 3:
                pattern = "HHmmss";
                break;
            case 4:
                pattern = "yyyyMMddHHmmss";
                break;
            case 5:
                pattern = "yyyyMM";
        }

        return (new SimpleDateFormat(pattern)).format(new Date());
    }
    //获取某年某月的天数
    public  static List<String> getMonthDays(int yearParam,int monthParam){
        Calendar calendar =Calendar.getInstance();
        calendar.set(yearParam, monthParam,1);
        int year = calendar.get(Calendar.YEAR);//年份
        int month = calendar.get(Calendar.MONTH)+1;//月份
        int day = calendar.getActualMaximum(Calendar.DATE);
        List<String> list = new ArrayList();
        for (int i = 1; i <= day; i++) {
            String aDate=null;
            if(month<10&&i<10){
                aDate = String.valueOf(year)+"-0"+month+"-0"+i;
            }
            if(month<10&&i>=10){
                aDate = String.valueOf(year)+"-0"+month+"-"+i;
            }
            if(month>=10&&i<10){
                aDate = String.valueOf(year)+"-"+month+"-0"+i;
            }
            if(month>=10&&i>=10){
                aDate = String.valueOf(year)+"-"+month+"-"+i;
            }

            list.add(aDate);
        }

      return list;
    }
}
